package top.buluoluo.productservice.dto.response;

import lombok.Data;
import top.buluoluo.productservice.entity.ProductSku;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Map;

@Data
public class SkuDTO {
    // SKU基本信息
    private Long id;
    private String skuCode;
    private Long spuId;
    private Long merchantId;
    // 规格属性
    private Map<String, String> specs;

    // 价格信息
    private BigDecimal price;
    private BigDecimal originalPrice;

    // 库存信息
    private Long stockQuantity;
    private Long availableStock; // 可用库存 = stockQuantity - lockStock
    private Long lockStock;

    // 图片信息
    private String imageUrl;

    // 状态信息
    private Integer status;
    private String statusDesc; // 状态描述（如"销售中"、"已下架"等）

    // 时间信息
    private LocalDateTime createTime;
    private LocalDateTime updateTime;

    // 辅助字段
    private String specsHash;

    // 从实体转换的工厂方法
    public static SkuDTO fromEntity(ProductSku entity) {
        SkuDTO dto = new SkuDTO();
        dto.setId(entity.getId());
        dto.setSkuCode(entity.getSkuCode());
        dto.setMerchantId(entity.getMerchantId());
        dto.setSpuId(entity.getSpuId());
        dto.setSpecs(entity.getSpecs());
        dto.setPrice(entity.getPrice());
        dto.setOriginalPrice(entity.getOriginalPrice());
        dto.setStockQuantity(entity.getStockQuantity());
        dto.setAvailableStock(entity.getStockQuantity() - entity.getLockStock());
        dto.setLockStock(entity.getLockStock());
        dto.setImageUrl(entity.getImageUrl());
        dto.setStatus(entity.getStatus());
        dto.setStatusDesc(getStatusDescription(entity.getStatus()));
        dto.setCreateTime(entity.getCreateTime());
        dto.setUpdateTime(entity.getUpdateTime());
        dto.setSpecsHash(entity.getSpecsHash());
        return dto;
    }

    // 状态描述映射
    private static String getStatusDescription(Integer status) {
        if (status == null) return "未知";
        return switch (status) {
            case 0 -> "禁用";
            case 1 -> "启用";
            case 2 -> "缺货";
            default -> "未知";
        };
    }
}